這很像員工編號,雖然大家都有名字但用員工編號搜尋員工有時候就是比較快。
variable之於記憶體位址,如同名字之於員工編號。
當我們declare variable的時候,電腦會依配置在記憶體空出一個空間以供程式使用。
Variable跟記憶體關係
就是跟電腦說“嘿,幫我在記憶體那邊空出一些空間,我要放東西,謝謝。”
例如打int age = 5;,等於跟電腦說,哈囉,幫我空出一個4 bytes的地方,這個空間叫age,裡面放5這個數字。
如果還不知道要放什麼,也可以打int age;,跟電腦說我還不知道放什麼,請幫我清出一個4 bytes空白叫做age的空間,等等再決定放什麼。
(引用自Day 12 - C++ 物件導向1 - 類別Class,那個book b1是什麼? object又是什麼?)
而之前沒有提到的是,電腦要怎麼找到這段記憶體呢?
在記憶體裡面有一個地址稱為記憶體位址,我們的variable name並不是實際的記憶體所在的地方,只是程式裡讓我們自己知道的標籤,例如分類箱上面寫“冬衣”,放在儲藏間右邊第二個貴子第二層,冬衣的標籤就是variable,那個箱子擺放的位子就是記憶體位址。
這是C++的招牌,跟別人Java與Python都不一樣最大的特色。
優化記憶體空間、優化code效率
& variable_name;
using namespace std;
int main(){
int num = 5;
cout << "這是vairable num: " << num << endl;
cout << “這是variable num的記憶體位址: ”<< #
}
然後,我們還能多元化的使用 &
和*
,把這個記憶體位址送往不同的variable name,注意是記憶體位址不是裡面裝的東西。就不用每次都加上&。
比方說:
string name = Mike;
string* firstname = &name; //這個firstname就叫做pointer name
cout <<"Name: " << name << endl;
cout << firstname;
//產出結果:Name: Mike
// Mike的記憶體位址
裝記憶體位址的variable叫做指標名稱pointer name。
上面解釋了如何連接並把variable裝進記憶體位址。
現在要來看要從記憶體位址找出存放在這個箱子裡的到底是什麼東西,可以這樣用:* 指標名稱pointer name;
string name = Mike;
string* firstname = &name;
cout << *firstname;
//產出結果: Mike
// 輸出variable string name裡面的值
也可以反過來,把資料裝進去喔!
string *firstname;
*firstname = "Mike";
但要注意:不能這樣裝 string firstname = "Mike";
,一定要上面那樣
Reference: Tutorialspoint, geeksforgeeks